package org.su.webadapter.template;

import org.apache.velocity.Template;
import org.apache.velocity.context.Context;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.Map;

/**
 * 模板引擎，
 * @author yangchuan createtime:2012-5-23上午9:59:02
 *	
 * @param <T>
 */
public interface ITemplateEngine {
	
	/**
	 * 生成html字串
	 * @param data map格式数据
	 * @param path 模板地址
	 * @return 翻译后的模板字符串
	 */
	public String generateHtml(Map<String, ?> data, String path) ;
	
	/**
	 * 向浏览器响应模板翻译出的页面
	 * 
	 * @param data map格式数据，存储模板中使用的变量
	 * @param path 模板文件地址
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 */
	public  void generateHtml(Map<String, ?> data, String path, HttpServletRequest request, HttpServletResponse response);
	
	/**
	 * 向浏览器响应模板翻译出的页面
	 * @param data map格式数据，存储模板中使用的变量
	 * @param t   模板对象
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 */
	public void generateHtml(Map<String, ?> data, Template t, HttpServletRequest request, HttpServletResponse response);

	
	/**
	 * 生成html字串
	 * @param data 一个普通对象，在模板中用sshObject对象获取
	 * @param path 模板文件地址
	 * @return 返回一个通过模板翻译后的字符串
	 */
	public String generateHtml(Object data, String path) ;
	
	/**
	 * 向浏览器响应模板翻译出的页面
	 * @param data map格式数据，存储模板中使用的变量
	 * @param t   模板对象
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 */
			
	public  void generateHtml(Object data, Template t, HttpServletRequest request, HttpServletResponse response);

	
	/**
	 * 向浏览器响应模板翻译出的页面
	 * @param data map格式数据，存储模板中使用的变量
	 * @param path 模板文件地址
	 * @param request  HttpServletRequest
	 * @param response HttpServletResponse
	 */
	public  void generateHtml(Object data, String path, HttpServletRequest request, HttpServletResponse response);
	
	
	
	

	/***************************************************************************
	 * 将模板输出为文件
	 * 
	 * @param data
	 *            map格式数据，存储模板中使用的变量
	 * @param srcPath
	 *            模板路径
	 * @param decPath
	 *            目标文件路径
	 */
	public  void generateFile(Map<String, ?> data, String srcPath, String decPath);

	/**
	 * 将模板输出为文件
	 * 
	 * @param data
	 *            map格式数据，存储模板中使用的变量
	 * @param request
	 * 			HttpServletRequest
	 * @param srcPath
	 *            模板路径
	 * @param decPath
	 *            目标文件路径
	 */
	public  void generateFile(Map<String, ?> data, String srcPath, String decPath, HttpServletRequest request);
	
	/**
	 * 将模板输出为文件
	 * 

	 * @param data
	 *            模板需要的数据
	 * @param file
	 *            要输出的文件           
	 * @param templateStr
	 *            模板内容字符串
	 */
	public void writeHtml(Map<String, ?> data, File file, String templateStr);

	
	/**
	 * 通过模板字串生成html字串
	 * @param data 模型数据
	 * @param templateStr 模型字串
	 * @param vmlog velocity日志标示
	 * @return
	 * @throws Exception
	 */
	public String writeHtml(Map<String, ?> data, String templateStr, String vmlog);
	
	
	/**
	 * 本方法参考VelocityServlet.mergeTemplate
	 * 
	 */
	public  void mergeTemplate(Template template, Context context, HttpServletResponse response);
}
